#ifndef __INI_H__
#define __INI_H__

#ifdef __cplusplus
extern "C"
{
#endif
#include <stdio.h>
#include <stdlib.h>
#include "../utils/array.h"

#define INI_MALLOC malloc
#define INI_FREE free

    typedef struct ini_parameter_st
    {
        char *key;
        char *val;
    } ini_parameter_t;

    typedef struct ini_section_st
    {
        char *key;
        array_t *parameter_arr;
    } ini_section_t;

    typedef struct ini_st
    {
        array_t *no_section_parameter_arr;
        array_t *section_arr;
    } ini_t;

    extern ini_t *ini_parse_str(const char *data);
    extern ini_t *ini_parse_file(const char *file_path);

    extern char *ini_find_parameter_val(ini_t *ini, const char *section, const char *parameter);
    extern array_t *ini_find_parameters(ini_t *ini, const char *section);

    extern void ini_free(ini_t **pp);
    extern void ini_print(ini_t *ini);

#ifdef __cplusplus
}
#endif

#endif
